#include <error.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char* argv[])
{
    //参数校验
    // ./test_readdir dir
    if(argc != 2)
    {
        error(1, 0, "Usage：%s dir", argv[0]);
    }
    // 创建指向目录项的结构体指针
    DIR * stream = opendir(argv[1]);
    //判断是否打开成功
    if(!stream)
    {
        error(1, 0, "opendir %s", argv[1]);
    }
    int errno = 0;
    // 注意判断是结尾还是出现错误
    // 结尾 会返回空，并且errno不会改变，所以前面先将errno置零
    // 出现错误 会返回空指针，并且设置errno
    struct dirent * cur;
    while( (cur = readdir(stream))!= NULL)
    {
        //没有出现错误或者没有到达末尾
        //打印
        printf("d_ino = %ld, d_off = %ld, d_reclen = %hu, d_typr = %d, d_name = %s\n", cur->d_ino, cur->d_off, cur->d_reclen, cur->d_type, cur->d_name);
    }
    //出现错误进行错误判断
    if(errno)
    {
        //错误码改变 说明是执行错误
        error(1, 1, "readdir");
    }
    else
    {
        printf("文件已到达末尾\n");
    }
    closedir(stream);
    return 0;
}
